/**
 * 
 * @authors youzhao.zhou@pandauu.com
 * @date    2016-09-08 15:12:44
 * @version $Id$
 * 
 * 客服页面
 * 
 */

;(function(root,factory){

  var dependent = {};

  dependent.zepto = typeof exports !== 'undefined' ? require('./zepto.js')&&root.$ : root.$;
  dependent.underscore = typeof exports !== 'undefined' ? require('../../public_src/js/underscore/underscore.js') : root._;
  dependent.Project = typeof exports !== 'undefined' ? require('../../public_src/js/1_self/1_project.js') : root.Project;
  dependent.conf = typeof exports !== 'undefined' ? require('../../public_src/js/1_self/2_config.js') : root.conf;
  dependent.log = typeof exports !== 'undefined' ? require('../../public_src/js/1_self/3_log.js') : root.p_log;
  //dependent.IScroll = typeof exports !== 'undefined' ? require('../../public_src/js/iscroll/build/iscroll.js') : root.IScroll;

  dependent.path = {
    zepto : '../../p_src/js/convert/zepto.js',
    underscore : '../../public_src/js/underscore/underscore.min',
    Project : '../../public_src/js/1_self/1_project',
    conf : '../../public_src/js/1_self/2_config',
    log : '../../public_src/js/1_self/3_log',
    //IScroll : '../../public_src/js/iscroll/build/iscroll.js',
  };
  
  if(typeof exports === 'object' && typeof module === 'object'){

    module.exports = factory(exports,
      dependent.zepto, 
      dependent.underscore,
      dependent.Project, 
      dependent.conf,
      dependent.log//,
      //dependent.IScroll
    );

  } else if (typeof define === 'function' && define.amd) {
    // AMD. Register as an anonymous module.

    define(['exports', 
      dependent.path.zepto, 
      dependent.path.underscore,
      dependent.path.Project, 
      dependent.path.conf,
      dependent.path.log//,
      //dependent.path.IScroll
      ], factory);
  } else if (typeof exports === 'object' && typeof exports.nodeName !== 'string') {
    // CommonJS
    factory(exports, 
      dependent.zepto, 
      dependent.underscore,
      dependent.Project, 
      dependent.conf,
      dependent.log//,
      //dependent.IScroll
    );
  } else {
    // Browser globals
    if (!(dependent.Project||dependent.conf||dependent.log)) {
      throw('请加载相应的文件！');
    }
    factory({},
      dependent.zepto, 
      dependent.underscore,
      dependent.Project, 
      dependent.conf,
      dependent.log//,
      //dependent.IScroll
    );
  }

})((typeof window !== 'undefined' ? window : this) ,function(exports,$ ,_ , Project, conf, log, IScroll, undefined){
  'use strict';

  setTimeout(function(){
    
    if (typeof $ === 'undefined') {
      $ = window.$;
    }

    if (typeof _ === 'undefined') {
      _ = window._;
    }
    /*
      调试开关
    */
    log._logToggle(false);

    /*
      
      URL以及数据API接口

    */
    var urlConf = conf._conf; 
    

    /*
      项目工具类对象
    */
    var project = new Project();
    var pubsub = project.pubSub();

    /*
      
      获取url中的GET参数
  
    */
    var params = project.getQueryStringObj();
    /*
      将URI查询参数保存到conf对象中
    */
    conf.extend({urlQuery:params});
    /*
      设置导航头部
    */
    project.setHTML('.middle', '熊猫天下客服');

    /*
      缓存会话ID
    */
    $('.service').attr({
      'data-id': params.thread_id
    });
    /*
      设置备注的跳转URL
    */
    $('#jsRemark').attr({
      'href': './remark.php?thread_id=' + params.thread_id
    });

    /*
      imgObj --- 图片延时加载对象
        单张图片加载
        多张图片加载
    */
    var imgObj = require('./img.js').img($, project);
    /*
      msgObj --- 消息对象对象
        历史消息加载
        服务器推送消息加载
        发送消息加载
    */
    var msgObj = require('./msg.js').msg($, log, conf, _, project);

    /*
      图片加载完毕通知事件
    */
    imgObj.set('imgDefered',function(data){
      $(data.dom).parent().removeClass('img-start');
      $(data.dom).attr({'data-deferr': 2});
            
      if (data.img.height < 600) {
        $(data.dom).parent().css({
          height : 'auto'
        });
      }
    });


    /*
      启动历史数据加载和渲染事件
    */
    msgObj.start('history',{thread_id : params.thread_id});
    /*
      设置历史数据加载和渲染完成后的通知事件
    */
    msgObj.set('imgDefer',function(data){
      pubsub.fireEvent('startImgsDeferrs');
    });
    /*
      监听多张图片延迟
    */
    pubsub.addEvent('startImgsDeferrs',function(data){
      imgObj.start('imgDefer');
    });

    /*
      启动服务器推送数据加载事件
    */
    msgObj.start('sseUser',{thread_id : params.thread_id});

    /*
      监听数据加载完成事件
        执行单条消息视图渲染
    */
    /*
      实时图片消息加载通知事件
    */
    msgObj.set('startImgDeferrs',function(data){
      /*
        启动单张图片延迟事件
      */
      imgObj.start('imgOneDefer', data);
    });
    /*
      启动实时消息渲染通知事件
    */
    pubsub.addEvent('realMsg',function(data){

      msgObj.start('realMsg',data);

    });
    
    /*
      发送消息模块
    */
    /*
      实时发送
    */
    var inputModule = require('./writing.js').inputModule($, conf, log, project);
    /*
      接收快捷回复操作通知
    */
    inputModule.receiver('quickreply',function(data){
      /*  
        跳转到快捷回复页面
          导航栏文字更改为---快捷回复列表
          获取快捷回复数据
          渲染视图
          添加事件
            快捷回复语选中
            使用事件
            window回退事件
      */
      var quick = require('./quick.js').quick($, log, conf, _, project);
      quick.set('getData',function(data){
        log._log(data);
        $('.jsSendInput').val(data.text);
        $('.jsSendInput').trigger('input');
      });
      quick.start('quick');
    });
    /*
      接收发送消息成功通知
    */
    inputModule.receiver('success',function(data){
      log._log(data);

      pubsub.fireEvent('realMsg',data);

    });
    /*
      接收发送消息失败通知
    */
    inputModule.receiver('fail',function(error){
      
      log._log(error);
    });
    /*
        
      渲染订单列表以及标签列表
        
    */
    var IScroll = typeof exports !== 'undefined' ? require('../../public_src/js/iscroll/build/iscroll-zoom.js') : window.IScroll;

    var ordersTags = require('./orders&tags.js').ordersTags($, log, conf, _, project, IScroll);
    
    ordersTags.start('init',{thread_id : params.thread_id});

    /*
      加载图片放大模块
    */
    var enlarge = require('./largeImg.js').enlarge($, log, project, IScroll);

    enlarge.start('enlarge');
    

    window.addEventListener('unload',function(){
      log = null;
      enlarge = null;
      IScroll = null;
      ordersTags = null;
      inputModule = null;

    },false);

  },0);

});
